package com.wanxi.service.Impl;

import com.wanxi.dao.Impl.UserDaoImpl;
import com.wanxi.dto.ResultDto;
import com.wanxi.model.UserModel;
import com.wanxi.service.UserService;
import com.wanxi.util.MD5;

import java.util.List;

/**
 * @author Li
 * @Date 2023/5/6 13:53
 */
public class UserServiceImpl implements UserService {
    private UserDaoImpl userDao = new UserDaoImpl();

    /**
     * 添加数据
     *
     * @param model
     * @return
     */
    public ResultDto add(UserModel model) {

//       增加用户先判断用户名是否已存在，若存在则添加失败,不存在再进行密码加密，添加用户
        boolean same = userDao.findSameName(model);
        if (same) {
            return ResultDto.builder()
                    .code(0)
                    .msg("用户名已存在")
                    .build();
        }
        boolean samePhone = userDao.findSamePhone(model);
        if (samePhone) {
            return ResultDto.builder()
                    .code(0)
                    .msg("电话号已存在")
                    .build();
        }
        boolean sameEmail = userDao.findSameEmail(model);
        if (sameEmail) {
            return ResultDto.builder()
                    .code(0)
                    .msg("邮箱已存在")
                    .build();
        }
        //返回代码信息，数据条数
        return ResultDto.builder()
                .code(0)
                .msg("添加成功")
                .count(userDao.add(model))
                .build();
    }

    /**
     * 删除用户信息
     *
     * @param model
     * @return
     */
    public ResultDto delete(UserModel model) {

        //返回代码信息，数据条数
        return ResultDto.builder()
                .code(0)
                .count(userDao.delete(model))
                .msg("删除成功")
                .build();
    }

    /**
     * 修改用户信息
     *
     * @param model
     * @return
     */
    public ResultDto update(UserModel model) {

        boolean same = userDao.findSameName(model);
        if (same) {
            return ResultDto.builder()
                    .code(0)
                    .msg("用户名已存在")
                    .count(-2)
                    .build();
        }


        return ResultDto.builder()
                .code(0)
                .msg("修改成功")
                .count(userDao.update(model))
                .build();
    }

    /**
     * 查询所有用户
     *
     * @param model
     * @return
     */
    public ResultDto findAll(UserModel model) {
        List<UserModel> modelList = userDao.findAll(model);

        ResultDto resultModel = ResultDto.builder()
                .data(modelList)
                .code(0)
                .msg("查询成功")
                .count(userDao.count(model))
                .data(userDao.findAll(model))
                .build();
        return resultModel;
    }

    public ResultDto findById(UserModel userModel) {

        return ResultDto.builder()
                .code(0)
                .msg("查询成功")
                .data(userDao.findById(userModel))
                .build();
    }

    /**
     * 查询总数
     * @return
     */
    @Override
    public Integer totalCount() {

        return userDao.totalCount();
    }


    /**
     * 登录逻辑
     * 1.先判断验证码是否相同
     * 2.把密码加密
     * 3.查询数据库，匹对密码和用户名是否正确，返回结果
     * 4.判断是否登录
     *
     * @param userModel
     * @return
     */
    public ResultDto login(UserModel userModel) {
        if (!userModel.getCode().equals(userModel.getVCode())) {
            return ResultDto.builder()
                    .code(0)
                    .msg("error-code")
                    .build();
        }
        userModel.setPassword(MD5.encoderByMd5(userModel.getPassword()));//将获取到的前端密码进行加密
        boolean isHave = userDao.findNameAndPass(userModel);
        if (isHave) {
            return ResultDto.builder()
                    .code(0)
                    .msg("success")
                    .build();
        }
        return ResultDto.builder()
                .code(0)
                .msg("error")
                .build();

    }

    /**
     * 修改密码
     *
     * @param userModel
     * @return
     */
    @Override
    public ResultDto updatePassword(UserModel userModel) {
        return ResultDto.builder()
                .code(0)
                .msg("修改成功")
                .count(userDao.updatePassword(userModel))
                .build();
    }

    /**
     * 重置密码
     *
     * @param userModel
     * @return
     */
    @Override
    public ResultDto resetPassword(UserModel userModel) {
        return ResultDto.builder()
                .code(0)
                .msg("重置成功")
                .count(userDao.resetPassword(userModel))
                .build();
    }


}
